/**
 * 实现 TS 包含的Pick<T, K>但，不能使用它。
 * 从类型T中选择出属性K，构造成一个新的类型。
 */

interface Todo {
  title: string
  description: string
  completed: boolean
}

// 答案
// keyof T 是获取到 类型T所有的属性的联合类型。K extends keyof T 表示 类型K 收窄与 T的 联合类型。
// [P in K] 表示 类型P 循环拿到 类型K的 所有 公共属性。 T[P] 表示类型索引。
type MyPick<T, K extends keyof T> = {
  [P in K]: T[P]
}

type TodoPreview = MyPick<Todo, 'title' | 'completed'>

const todo: TodoPreview = {
  title: 'Clean room',
  completed: false,
}
